/***
 *
 * 对文件操作的模块 
 * 
*/

var fs = require('fs')

var filename = './db.json'

//所有信息的函数
exports.findAll = function (callback) {
  fs.readFile(filename, function (error, data) {
    if (error) {
      console.log(error, "文件读取失败")
      return callback(error)
    }
    callback(null, JSON.parse(data.toString()).students)
  })
}

//通过id查找的函数
exports.findById = function (id, callback) {
  fs.readFile(filename, function (error, data) {
    if (error) {
      console.log(error, "文件读取失败！！")
      return callback(error)
    }
    //得到students的数组
    var filedata = JSON.parse(data.toString()).students
    //通过id查找对应的对象
    var getdatabyid = filedata.find(function (item, index) {
      return parseInt(item.id) === parseInt(id)
    })
    callback(null, getdatabyid)
  })
}

//更新数据的函数
exports.updataById = function (data, callback) {
  // console.log(typeof (data.id));
  fs.readFile(filename, function (error, Fdata) {
    if (error) {
      console.log("文件读取失败！！")
      return callback(error)
    }
    //读到的数据转换成json格式
    var getfiledata = JSON.parse(Fdata.toString()).students
    var getdatabyid = getfiledata.find(function (item, index) {
      return parseInt(item.id) === parseInt(data.id)
    })
    //遍历拷贝对象，这样不用一个个的写=
    for (key in data) {
      getdatabyid[key] = data[key]
    }
    //把替换好的对象编程字符串
    var filedata = JSON.stringify({ students: getfiledata })
    //把字符串写回文件中
    fs.writeFile(filename, filedata, function (error) {
      if (error) {
        console.log("writeFile error!!")
        return callback(error)
      }
      return callback(null)
    })
  })
}


//删除的请求处理
exports.delete = function (data, callback) {
  // console.log(data)
  fs.readFile(filename, function (error, Fdata) {
    if (error) {
      console.log("文件读取失败！！")
      return callback(error)
    }
    var getFileData = JSON.parse(Fdata.toString()).students
    var deleteId = getFileData.findIndex(function (item) {
      return parseInt(item.id) === parseInt(data)
    })
    // console.log(deleteId)

    //删除这个id的对象
    getFileData.splice(deleteId, 1)

    var fileData = JSON.stringify({ students: getFileData })
    fs.writeFile(filename, fileData, function (error) {
      if (error) {
        console.log("文件写入失败!!")
        return callback(error)
      }
      callback(null)
    })
  })
}

//处理添加的post请求
exports.add = function (data, callback) {
  fs.readFile(filename, function (error, Fdata) {
    if (error) {
      console.log("文件读取失败！！")
      return callback(error)
    }
    var getFileData = JSON.parse(Fdata).students

    //设置传过来的对象的id,原来的数组的对象内id最大值+1
    data.id = Math.max.apply(Math, getFileData.map(function (item) { return item.id })) + 1
    // console.log(data)
    getFileData.push(data);
    // console.log(getFileData);
    var fileData = JSON.stringify({ students: getFileData })
    fs.writeFile(filename, fileData, function (error) {
      if (error) {
        console.log("文件写入失败！！")
        return callback(error)
      }
      callback(null)
    })

  })
}


